#include "menu.h"
#include <stdio.h>
#include <string.h>
#include <conio.h> // Windows特有的头文件，用于getch()
#include <time.h>

#pragma once

#define MAX_PASSWORD_LENGTH 20
#define MAX_ID_LENGTH 10
#define MAX_CODE_LENGTH 10
void hidePassword(char *password) {
    //返回char *password
    char ch;
    int i = 0;
    while (1) {
        ch = getch(); // 获取字符，不需要按回车
        if (ch == '\r') { // 回车键结束输入
            password[i] = '\0'; // 字符串结束符
            break;
        } else if (ch == '\b') { // 处理退格键
            if (i > 0) {
                i--;
                printf("\b \b"); // 光标后退，打印空格清除字符
            }
        } else if (i < MAX_PASSWORD_LENGTH - 1) {
            password[i++] = ch; // 保存密码字符
            printf("*"); // 显示*
        }
    }
}

void receivePassword(char *password){
    //hidePassword的不隐藏密码版本
    char ch;
    int i = 0;
    while (1) {
        ch = getch(); // 获取字符，不需要按回车
        if (ch == '\r') { // 回车键结束输入
            password[i] = '\0'; // 字符串结束符
            break;
        } else if (ch == '\b') { // 处理退格键
            if (i > 0) {
                i--;
                printf("\b \b"); // 光标后退，打印空格清除字符
            }
        } else if (i < MAX_PASSWORD_LENGTH - 1) {
            password[i++] = ch; // 保存密码字符
            printf("%c",ch); // 显示*
        }
    }
}

int check_code_and_pwd(char *code,char *pwd){
    FILE *fp=fopen("password.txt", "r");
    char line[256];
    while (fgets(line,100,fp)!=NULL) {
        if(strncmp(code,line,5)==0){
            if (strncmp(pwd,line+5,10)) {
                return 1;
            }
            else {
                printf("%s/n%s",pwd,line+5);
            }
        }
    }
    return 0;
}

int check_code_only(char *code){
    FILE *fp=fopen("academylist.txt", "r");
    char line[256];
    while (fgets(line,100,fp)!=NULL) {
        if(strncmp(code,line,9)==0){
            return 1;
        }
    }
    return 0;
}

int check_pwd_only(char *code){
    FILE *fp=fopen("judge_pwd.txt", "r");
    if(fp==NULL){
        printf("file not found");
    }
    char line[256];
    while (fgets(line,100,fp)!=NULL) {
        char *true_pwd;
        sscanf(line, "%s",true_pwd);
        if(strncmp(code,true_pwd,9)==0){
            return 1;
        }
    }
    return 0;
}







int login_academy(){
    char enteredPassword[MAX_PASSWORD_LENGTH];
    char enteredCode[MAX_CODE_LENGTH];
    printf("请输入院编号：");
    receivePassword(enteredCode);
    printf("\n");
    printf("请输入院管理员密码：");
    hidePassword(enteredPassword);
    printf("\n");

    // 检查密码
    if (check_code_and_pwd(enteredCode, enteredPassword)) {
        printf("密码正确，登录成功！\n");
        academy_admin_menu(enteredCode);
        return 1;
    }  
    printf("密码错误，登录失败！\n");
    return 0;
}



int adminLogin(){
    const char correctPassword[] = "123456"; // 正确密码
    char enteredPassword[MAX_PASSWORD_LENGTH];
    printf("请输入总管理员密码：");
    hidePassword(enteredPassword);
    printf("\n");

    // 检查密码
    if (strcmp(enteredPassword, correctPassword) == 0) {
        printf("密码正确，登录成功！\n");
        admin_menu();
        return 1;
    }  
    printf("密码错误，登录失败！\n");
    return 0;
   
}

int refereeLogin(){
    char enteredPassword[MAX_PASSWORD_LENGTH];
    printf("请输入裁判员密码：");
    hidePassword(enteredPassword);
    printf("\n");

    // 检查密码
    if (check_pwd_only(enteredPassword)) {
        printf("密码正确，登录成功！\n");
        referee_menu();//进入系统
        return 1;
    }  
    printf("密码错误，登录失败！\n");
    return 0;
   
}


int athleteLogin(){
    char enteredCode[MAX_PASSWORD_LENGTH];
    printf("请输入学号或职工号: ");
    receivePassword(enteredCode);
    printf("\n");

    // 检查密码
    if (check_code_only(enteredCode) == 1) {
        printf("密码正确，登录成功！\n");
        athlete_menu(enteredCode);//进入系统
        return 1;
    }
    printf("密码错误，登录失败！\n");
    return 0;
   
}//已经完成

int all_login() {
     int choice;
    printf("选择身份：1.总管理员，2.院管理员，3.裁判员，4.运动员\n输入对应数字进行选择:");
    scanf("%d", &choice);
    switch (choice) {
        case 1:
            if(adminLogin()==1){
                return 1;
            } // 总管理员登录
            break;
        case 2:
            if(login_academy()==1){
                return 2;
            } // 院管理员登录//下级未完成
            break;
        case 3:
            if(refereeLogin()==1){
                return 3;
            } // 裁判员登录//下级函数未完成，可能存在多个教练情况
            break;
        case 4:
            if(athleteLogin()==1){
                return 4;
            }; // 运动员登录//下级函数未完成
            break;
        default:
            printf("无效选择，请重新尝试。\n");
            break;
    }
    return 0;
}
